"""
Volume 存储示例
功能：演示如何使用 Modal Volume 进行数据持久化存储
特点：适用于"一次写入，多次读取"的场景，如模型、数据集存储
注意：需要 commit() 提交更改，reload() 获取最新数据
运行：modal run 07_volume_storage.py
"""
import modal
import pathlib

app = modal.App("volume-app")
# 创建或引用一个持久化的 Volume
model_volume = modal.Volume.from_name("my-model-store", create_if_missing=True)
MODEL_DIR = "/model_data"

# 函数一：下载并保存数据到 Volume
@app.function(volumes={MODEL_DIR: model_volume})
def download_data():
    model_path = pathlib.Path(MODEL_DIR) / "data.txt"
    if not model_path.exists():
        print("下载数据...")
        model_path.write_text("这是模型数据")
        # 必须 commit 才能使更改对其他函数可见
        model_volume.commit()
        print("数据已保存并提交到 Volume。")

# 函数二：从 Volume 读取数据
@app.function(volumes={MODEL_DIR: model_volume})
def use_data():
    model_path = pathlib.Path(MODEL_DIR) / "data.txt"
    # 需要 reload() 来获取最新版本的数据
    model_volume.reload()
    if model_path.exists():
        content = model_path.read_text()
        print(f"从 Volume 中读取到数据: '{content}'")
    else:
        print("在 Volume 中未找到数据。")

@app.local_entrypoint()
def main():
    download_data.remote()
    use_data.remote()